package com.ling.pl.security.service;

import com.ling.pl.core.commons.support.DaoPage;
import com.ling.pl.core.commons.utils.BatchUtils;
import com.ling.pl.core.commons.utils.reflect.ReflectUtils;
import com.ling.pl.core.dao.IDao;
import com.ling.pl.core.service.impl.BaseService;
import com.ling.pl.security.dao.DefaultOrgDao;
import com.ling.pl.security.model.DefaultOrg;
import com.ling.pl.security.model.DefaultOrgVO;

import javax.annotation.Resource;
import java.util.*;

/**
 * @author bo.wang
 */
public class BaseDefaultOrgService extends BaseService {

    public static final String BEAN_ID = "defaultOrgService";

	@Resource
	DefaultOrgDao defaultOrgDao;

	public IDao getDao() {
		return defaultOrgDao;
	}

    public List<DefaultOrgVO> convertDefaultOrgToVO(List<DefaultOrg> models) {
        List<DefaultOrgVO> result = new ArrayList<DefaultOrgVO>();
        for (DefaultOrg initiation : models) {
            DefaultOrgVO inparam = convertDefaultOrgToVO(initiation);
			result.add(inparam);
		}
		return result;
	}

    public DefaultOrgVO convertDefaultOrgToVO(DefaultOrg model) {
        DefaultOrgVO inparam = new DefaultOrgVO();
		ReflectUtils.copyProperties(model, inparam);
		return inparam;
	}

    public DefaultOrg convertDefaultOrgVOTo(DefaultOrgVO vo) {
        DefaultOrg entity = new DefaultOrg();
		ReflectUtils.copyProperties(vo, entity);
		return entity;
	}

    public List<DefaultOrg> convertDefaultOrgVOTo(List<DefaultOrgVO> vos) {
        List<DefaultOrg> result = new ArrayList<DefaultOrg>();
        for (DefaultOrgVO vo : vos) {
            DefaultOrg entity = convertDefaultOrgVOTo(vo);
            result.add(entity);
        }
        return result;
    }

	public DaoPage findDefaultOrgVOByParams(Map params, Integer pageIndex,
                                            Integer pageSize) {
        if (params == null) {
            params = new HashMap();
        }
        DaoPage daoPage = defaultOrgDao.findDefaultOrgByParams(params, pageIndex, pageSize);
		daoPage.setResult(convertDefaultOrgToVO((List<DefaultOrg>) daoPage.getResult()));
		return daoPage;
	}

	public List<DefaultOrgVO> findDefaultOrgVOByParams(Map params) {
        if (params == null) {
            params = new HashMap();
        }
        List<DefaultOrg> temp = defaultOrgDao.findDefaultOrgByParams(params);
		return convertDefaultOrgToVO(temp);
	}

    public DaoPage findDefaultOrgByParams(Map params, Integer pageIndex,
                                          Integer pageSize) {
        if (params == null) {
            params = new HashMap();
        }
        DaoPage daoPage = defaultOrgDao.findDefaultOrgByParams(params, pageIndex, pageSize);
        return daoPage;
    }

    public List<DefaultOrg> findDefaultOrgByParams(Map params) {
        if (params == null) {
            params = new HashMap();
        }
        List<DefaultOrg> temp = defaultOrgDao.findDefaultOrgByParams(params);
        return temp;
    }


    public void saveDefaultOrgDataListsMap(Map<String, List<DefaultOrgVO>> dataListsMap) {
		Collection<DefaultOrgVO> deleteList = BatchUtils.to(DefaultOrgVO.class).getDeleteEntities(dataListsMap);
        Collection<DefaultOrgVO> insertList = BatchUtils.to(DefaultOrgVO.class).getInsertEntities(dataListsMap);
        Collection<DefaultOrgVO> updateList = BatchUtils.to(DefaultOrgVO.class).getModifiedEntities(dataListsMap);
        if (updateList != null && updateList.size() > 0) {
            for (DefaultOrgVO vo : updateList) {
                DefaultOrg entity = convertDefaultOrgVOTo(vo);
				defaultOrgDao.update(entity);
			}
//			defaultOrgDao.updateAll(updateList);
		}
        if (insertList != null && insertList.size() > 0) {
            for (DefaultOrgVO vo : insertList) {
                DefaultOrg entity = convertDefaultOrgVOTo(vo);
				defaultOrgDao.save(entity);
				vo.setId(entity.getId());
			}
//			defaultOrgDao.saveAll(insertList);
		}
        if (deleteList != null && deleteList.size() > 0) {
            for (DefaultOrgVO vo : deleteList) {
                DefaultOrg entity = new DefaultOrg();
				entity.setId(vo.getId());
				defaultOrgDao.remove(entity);
			}
//			defaultOrgDao.removeAll(deleteList);
		}

	}
}

